Component({
  /**
   * 组件的初始数据
   */
  data: {
    tempFilePath: '',
    hideModal: false,
    hasDraw: false,
    canvasName: '#writeCanvas',
    ctx: '',
    canvasWidth: 0,
    canvasHeight: 0,
    startPoint: {
      x: 0,
      y: 0,
    },
    selectColor: 'black',
    lineColor: '#1A1A1A', // 颜色
    lineSize: 1, // 笔记倍数
    radius: 4, //画圆的半径
  },
  // 初始化画布
  ready() {
    this.setData({
      hideModal: false
    })
    let that = this
    let query = wx.createSelectorQuery().in(this);
    //获取自定义组件的SelectQuery对象
    this.canvasCtx = wx.createCanvasContext('signature', that)
    // 设置线的样式
    this.canvasCtx.setLineCap("round");
    this.canvasCtx.setLineJoin("round");
    // 初始化颜色
    this.canvasCtx.setStrokeStyle(that.data.selectColor);
    // 初始化粗细
    query.select('.modal-canvas').boundingClientRect(rect => {
      this.setData({
        canvasWidth: rect.width,
        canvasHeight: rect.height,
      });
    }).exec();
  },
  // 方法列表
  methods: {
    scaleStart(event) {
      if (event.type != 'touchstart') return false;
      let currentPoint = {
        x: event.touches[0].x,
        y: event.touches[0].y
      }
      // this.data.ctx.moveTo(currentPoint.x, currentPoint.y)
      this.drawCircle(currentPoint);
      this.setData({
        startPoint: currentPoint,
        hasDraw: true, //签字了
      });
    },
    mouseDown() {},
    scaleEnd(e) {
      this.setData({
        isStart: true
      })
    },
    scaleMove(event) {
      if (event.type != "touchmove") return false;
      let {
        startPoint
      } = this.data
      let currentPoint = {
        x: event.touches[0].x,
        y: event.touches[0].y
      }

      this.drawLine(startPoint, currentPoint)
      this.setData({
        startPoint: currentPoint
      })
    },
    drawCircle(point) { //这里负责点
      let ctx = this.canvasCtx;
      ctx.beginPath();
      ctx.setFillStyle(this.data.lineColor)
      //笔迹粗细由圆的大小决定
      ctx.arc(point.x, point.y, this.data.radius, 0, 2 * Math.PI);
      ctx.fill();
      ctx.closePath();
      ctx.draw(true)
    },
    drawLine(sourcePoint, targetPoint) {
      let ctx = this.canvasCtx;
      this.drawCircle(targetPoint);
      ctx.beginPath();
      ctx.setStrokeStyle(this.data.lineColor)
      ctx.setLineWidth(this.data.radius * 2)
      ctx.moveTo(sourcePoint.x, sourcePoint.y);
      ctx.lineTo(targetPoint.x, targetPoint.y);
      ctx.stroke();
      ctx.closePath();
    },
    clearCanvas() {
      //清空画布
      let ctx = this.canvasCtx;
      ctx.clearRect(0, 0, this.data.canvasWidth, this.data.canvasHeight);
      ctx.fillStyle = 'rgba(0, 0, 0, .1)';
      ctx.draw()
      this.setData({
        hasDraw: false //未签字
      })
    },
    save(cb) {
      let that = this
      let {
        hasDraw,
      } = this.data
      if (!hasDraw) {
        wx.showToast({
          title: '您还未签名！',
          icon: 'none',
          mask: true
        })
        return
      } else {
        let {
          canvasHeight,
          canvasWidth
        } = that.data;
        wx.canvasToTempFilePath({
          x: 0,
          y: 0,
          width: canvasWidth,
          height: canvasHeight,
          destWidth: 200,
          destHeight: 80,
          canvasId: 'signature',
          canvas: that.data.ctx,
          fileType: "png",
          success(res) {
            console.log(res)
            if (res.tempFilePath) {
              // 文件转base64
              wx.getFileSystemManager().readFile({
                filePath: res.tempFilePath,
                encoding: "binary",
                success: (val) => {
                  cb && cb(val, res);
                  that.triggerEvent("saveToImageEvent", val.data);
                },
              });
            }
          },
          fail(err) {
            console.log(err);
          }
        }, that)
      }
    },
  }
})